<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    <title>My New Hugo Site</title>
    <meta name="viewport" content="width=device-width,minimum-scale=1">
    <meta name="generator" content="Hugo 0.75.1" />
    
    
      <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
    

    
    
      <link href="/dist/css/app.4fc0b62e4b82c997bb0041217cd6b979.css" rel="stylesheet">
    

    

    
      

    

    
    
    <meta property="og:title" content="" />
<meta property="og:description" content="打飞碟 项目思路参考师兄/师姐，地址
blog内容：
 游戏规则 UML类图及说明 飞碟制作部分与飞碟生产回收部分 动作部分 记录分数部分 场景管理部分  游戏规则 飞碟从左右两边随机发出，鼠标点击飞碟可获得分数，飞碟消失前未点击则扣除一滴血量，初始血量为5.
UML类图 基础动作类 BaseAction 及其控制类 BaseActionCtrl; 飞碟动作类 FlyAction 和 FlyphysicsAction ，两者都继承 BaseAction 类；飞碟动作控制类 FlyActionCtrl 和 FlyphysicsCtrl ，两者都继承 BaseActionCtrl;
DiskData 自定义预制件 disk 的属性，再使用序列化的方法来使得属性在 inspector 中显示出来；
FlyFactory 类管理已有飞碟、生产新飞碟以及回收使用过的飞碟；
ScoreRecorder 类记录分数；
UserGUI 类与用户交互；
ActionCtrlAdaptor 接口是场景控制器 FirstCtrl类与飞碟动作控制类的借口；
FirstCtrl类负责场景的加载；
飞碟制作部分与飞碟生产回收部分 DiskData 部分定义飞碟属性： 分数 score、颜色color、大小scale,初始位置 position
public class FlyData:MonoBehaviour{ public int score = 1; public Vector3 scale = new Vector3(1,0.25f,1); public Vector3 position; public Color color= Color." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://yanx57.gitee.io/post/1/" />

<meta itemprop="name" content="">
<meta itemprop="description" content="打飞碟 项目思路参考师兄/师姐，地址
blog内容：
 游戏规则 UML类图及说明 飞碟制作部分与飞碟生产回收部分 动作部分 记录分数部分 场景管理部分  游戏规则 飞碟从左右两边随机发出，鼠标点击飞碟可获得分数，飞碟消失前未点击则扣除一滴血量，初始血量为5.
UML类图 基础动作类 BaseAction 及其控制类 BaseActionCtrl; 飞碟动作类 FlyAction 和 FlyphysicsAction ，两者都继承 BaseAction 类；飞碟动作控制类 FlyActionCtrl 和 FlyphysicsCtrl ，两者都继承 BaseActionCtrl;
DiskData 自定义预制件 disk 的属性，再使用序列化的方法来使得属性在 inspector 中显示出来；
FlyFactory 类管理已有飞碟、生产新飞碟以及回收使用过的飞碟；
ScoreRecorder 类记录分数；
UserGUI 类与用户交互；
ActionCtrlAdaptor 接口是场景控制器 FirstCtrl类与飞碟动作控制类的借口；
FirstCtrl类负责场景的加载；
飞碟制作部分与飞碟生产回收部分 DiskData 部分定义飞碟属性： 分数 score、颜色color、大小scale,初始位置 position
public class FlyData:MonoBehaviour{ public int score = 1; public Vector3 scale = new Vector3(1,0.25f,1); public Vector3 position; public Color color= Color.">

<meta itemprop="wordCount" content="228">



<meta itemprop="keywords" content="" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content=""/>
<meta name="twitter:description" content="打飞碟 项目思路参考师兄/师姐，地址
blog内容：
 游戏规则 UML类图及说明 飞碟制作部分与飞碟生产回收部分 动作部分 记录分数部分 场景管理部分  游戏规则 飞碟从左右两边随机发出，鼠标点击飞碟可获得分数，飞碟消失前未点击则扣除一滴血量，初始血量为5.
UML类图 基础动作类 BaseAction 及其控制类 BaseActionCtrl; 飞碟动作类 FlyAction 和 FlyphysicsAction ，两者都继承 BaseAction 类；飞碟动作控制类 FlyActionCtrl 和 FlyphysicsCtrl ，两者都继承 BaseActionCtrl;
DiskData 自定义预制件 disk 的属性，再使用序列化的方法来使得属性在 inspector 中显示出来；
FlyFactory 类管理已有飞碟、生产新飞碟以及回收使用过的飞碟；
ScoreRecorder 类记录分数；
UserGUI 类与用户交互；
ActionCtrlAdaptor 接口是场景控制器 FirstCtrl类与飞碟动作控制类的借口；
FirstCtrl类负责场景的加载；
飞碟制作部分与飞碟生产回收部分 DiskData 部分定义飞碟属性： 分数 score、颜色color、大小scale,初始位置 position
public class FlyData:MonoBehaviour{ public int score = 1; public Vector3 scale = new Vector3(1,0.25f,1); public Vector3 position; public Color color= Color."/>

	
  </head>

  <body class="ma0 avenir bg-near-white">

    
   
  

  <header>
    <div class="bg-black">
      <nav class="pv3 ph3 ph4-ns" role="navigation">
  <div class="flex-l justify-between items-center center">
    <a href="/" class="f3 fw2 hover-white no-underline white-90 dib">
      
        My New Hugo Site
      
    </a>
    <div class="flex-l items-center">
      

      
      















    </div>
  </div>
</nav>

    </div>
  </header>



    <main class="pb7" role="main">
      
  
  <article class="flex-l flex-wrap justify-between mw8 center ph3">
    <header class="mt4 w-100">
      <aside class="instapaper_ignoref b helvetica tracked">
          
        POSTS
      </aside>
      




  <div id="sharing" class="mt3">

    
    <a href="https://www.facebook.com/sharer.php?u=https://yanx57.gitee.io/post/1/" class="facebook no-underline" aria-label="share on Facebook">
      <svg height="32px"  style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M28.765,50.32h6.744V33.998h4.499l0.596-5.624h-5.095  l0.007-2.816c0-1.466,0.14-2.253,2.244-2.253h2.812V17.68h-4.5c-5.405,0-7.307,2.729-7.307,7.317v3.377h-3.369v5.625h3.369V50.32z   M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;"/></svg>

    </a>

    
    
    <a href="https://twitter.com/share?url=https://yanx57.gitee.io/post/1/&amp;text=" class="twitter no-underline" aria-label="share on Twitter">
      <svg height="32px"  style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M37.167,22.283c-2.619,0.953-4.274,3.411-4.086,6.101  l0.063,1.038l-1.048-0.127c-3.813-0.487-7.145-2.139-9.974-4.915l-1.383-1.377l-0.356,1.017c-0.754,2.267-0.272,4.661,1.299,6.271  c0.838,0.89,0.649,1.017-0.796,0.487c-0.503-0.169-0.943-0.296-0.985-0.233c-0.146,0.149,0.356,2.076,0.754,2.839  c0.545,1.06,1.655,2.097,2.871,2.712l1.027,0.487l-1.215,0.021c-1.173,0-1.215,0.021-1.089,0.467  c0.419,1.377,2.074,2.839,3.918,3.475l1.299,0.444l-1.131,0.678c-1.676,0.976-3.646,1.526-5.616,1.568  C19.775,43.256,19,43.341,19,43.405c0,0.211,2.557,1.397,4.044,1.864c4.463,1.377,9.765,0.783,13.746-1.568  c2.829-1.673,5.657-5,6.978-8.221c0.713-1.716,1.425-4.851,1.425-6.354c0-0.975,0.063-1.102,1.236-2.267  c0.692-0.678,1.341-1.419,1.467-1.631c0.21-0.403,0.188-0.403-0.88-0.043c-1.781,0.636-2.033,0.551-1.152-0.402  c0.649-0.678,1.425-1.907,1.425-2.267c0-0.063-0.314,0.042-0.671,0.233c-0.377,0.212-1.215,0.53-1.844,0.72l-1.131,0.361l-1.027-0.7  c-0.566-0.381-1.361-0.805-1.781-0.932C39.766,21.902,38.131,21.944,37.167,22.283z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4  s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/></svg>

    </a>

    
    <a href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https://yanx57.gitee.io/post/1/&amp;title=" class="linkedin no-underline" aria-label="share on LinkedIn">
      <svg  height="32px"  style="enable-background:new 0 0 65 65;" version="1.1" viewBox="0 0 65 65" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <path d="M50.837,48.137V36.425c0-6.275-3.35-9.195-7.816-9.195  c-3.604,0-5.219,1.983-6.119,3.374V27.71h-6.79c0.09,1.917,0,20.427,0,20.427h6.79V36.729c0-0.609,0.044-1.219,0.224-1.655  c0.49-1.22,1.607-2.483,3.482-2.483c2.458,0,3.44,1.873,3.44,4.618v10.929H50.837z M22.959,24.922c2.367,0,3.842-1.57,3.842-3.531  c-0.044-2.003-1.475-3.528-3.797-3.528s-3.841,1.524-3.841,3.528c0,1.961,1.474,3.531,3.753,3.531H22.959z M34,64  C17.432,64,4,50.568,4,34C4,17.431,17.432,4,34,4s30,13.431,30,30C64,50.568,50.568,64,34,64z M26.354,48.137V27.71h-6.789v20.427  H26.354z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/>
</svg>

    </a>
  </div>


      <h1 class="f1 athelas mt3 mb1"></h1>
      
      
      <time class="f6 mv4 dib tracked" datetime="0001-01-01T00:00:00Z">January 1, 0001</time>

      
      
    </header>
    <div class="nested-copy-line-height lh-copy serif f4 nested-links nested-img mid-gray pr4-l w-two-thirds-l"><h1 id="打飞碟">打飞碟</h1>
<p>项目思路参考师兄/师姐，<a href="https://blog.csdn.net/c486c/article/details/79952255">地址</a></p>
<p>blog内容：</p>
<ul>
<li><strong>游戏规则</strong></li>
<li><strong>UML类图及说明</strong></li>
<li><strong>飞碟制作部分与飞碟生产回收部分</strong></li>
<li><strong>动作部分</strong></li>
<li><strong>记录分数部分</strong></li>
<li><strong>场景管理部分</strong></li>
</ul>
<h2 id="游戏规则">游戏规则</h2>
<p>飞碟从左右两边随机发出，鼠标点击飞碟可获得分数，飞碟消失前未点击则扣除一滴血量，初始血量为5.</p>
<h2 id="uml类图">UML类图</h2>
<p><img src="https://yanx57.gitee.io/photo/FlyDisk.png" alt="img"></p>
<p>基础动作类 BaseAction 及其控制类 BaseActionCtrl; 飞碟动作类 FlyAction 和 FlyphysicsAction ，两者都继承 BaseAction 类；飞碟动作控制类 FlyActionCtrl 和 FlyphysicsCtrl ，两者都继承 BaseActionCtrl;</p>
<p>DiskData 自定义预制件 disk 的属性，再使用序列化的方法来使得属性在 inspector 中显示出来；</p>
<p>FlyFactory 类管理已有飞碟、生产新飞碟以及回收使用过的飞碟；</p>
<p>ScoreRecorder 类记录分数；</p>
<p>UserGUI 类与用户交互；</p>
<p>ActionCtrlAdaptor 接口是场景控制器 FirstCtrl类与飞碟动作控制类的借口；</p>
<p>FirstCtrl类负责场景的加载；</p>
<h2 id="飞碟制作部分与飞碟生产回收部分">飞碟制作部分与飞碟生产回收部分</h2>
<p>DiskData 部分定义飞碟属性： 分数 score、颜色color、大小scale,初始位置 position</p>
<pre><code>public class FlyData:MonoBehaviour{
    public int score = 1;
    public Vector3 scale = new Vector3(1,0.25f,1);
    public Vector3 position;
    public Color color= Color.white;
} 
</code></pre><p>使用序列化方法编辑 inspector 窗口，只需要开启更新，使得score、color、scale 可视化即可。</p>
<pre><code>[CustomEditor(typeof(FlyData))]
[CanEditMultipleObjects]
public class FlyAttribute:Editor{
    SerializedProperty score;                              
    SerializedProperty color;                            
    SerializedProperty scale;
    void OnEnable() {
        score = serializedObject.FindProperty(&quot;score&quot;);
        color = serializedObject.FindProperty(&quot;color&quot;);
        scale = serializedObject.FindProperty(&quot;scale&quot;);

    }
    public override void OnInspectorGUI() {
        serializedObject.Update();//启动更新 inspector窗口
        //显示
        EditorGUILayout.PropertyField(score);
        EditorGUILayout.PropertyField(color);
        EditorGUILayout.PropertyField(scale);
        
        //确定更新
        serializedObject.ApplyModifiedProperties();
    }
}
</code></pre><p>FlyFactory 类管理正在使用以及空闲的飞碟对象，并实现成员方法来提供飞碟和回收飞碟</p>
<pre><code>public GameObject GetEmptyFly(int turn);//根据turn等级提供相应等级的飞碟
 public void FreeFly(GameObject fly)；//回收飞碟对象
</code></pre><h2 id="动作类及其控制类">动作类及其控制类</h2>
<p>FlyAction 类中需要设定运动的相应属性：初速度、加速度、重力加速度、当前时间的欧拉角以及时间变量以及相应初始化函数、更新函数；</p>
<pre><code>		private Vector3 s_vector;
    private Vector3 gravity_vector = Vector3.zero;
    private Vector3 c_angle = Vector3.zero;
    private float time;
    public float gravity = -7;
    public static FlyAction GetBaseAction(Vector3 direction, float angle, float power);//初始化初速度
    public override void Update()；//每帧更新飞碟的位置
</code></pre><p>FlyphysicsAction类类似，只是更新时的规则不一样；</p>
<p>控制器只需要调用运动类中的函数即可，主要充当与场景控制器交互的角色。</p>
<h2 id="记录分数">记录分数</h2>
<p>设置一个变量表示分数，再设置增加分数和重置分数的方法</p>
<pre><code>public class ScoreRecorder : MonoBehaviour
{
    public int score;                   
    void Start ()
    {
        score = 0;
    }
    //记录分数
    public void Record(GameObject disk)
    {
        
        score += disk.GetComponent&lt;FlyData&gt;().score;;
        
    }
    //重置分数
    public void Reset()
    {
        score = 0;
    }
}
</code></pre><h2 id="场景控制器">场景控制器</h2>
<p>场景控制器需要在游戏开始和进行时不断发出飞碟。并使用射线 Ray类来判断用户是否点击了飞碟，如果点击了飞碟，则需要通知FlyFactory 延迟一小段时间回收相应飞碟；在游戏结束时停止发送飞碟；回收飞碟部分参考师兄/师姐的代码</p>
<pre><code> IEnumerator WaitingParticle(float wait_time, RaycastHit hit, FlyFactory flyFactory, GameObject obj){
        yield return new WaitForSeconds(wait_time);
        hit.collider.gameObject.transform.position = new Vector3(0, -9, 0);
        flyFactory.FreeFly(obj);
    }
</code></pre><ul class="pa0">
  
</ul>
<div class="mt6 instapaper_ignoref">
      
      
      </div>
    </div>

    <aside class="w-30-l mt6-l">




</aside>

  </article>

    </main>
    <footer class="bg-black bottom-0 w-100 pa3" role="contentinfo">
  <div class="flex justify-between">
  <a class="f4 fw4 hover-white no-underline white-70 dn dib-ns pv2 ph3" href="https://yanx57.gitee.io/" >
    &copy;  My New Hugo Site 2021 
  </a>
    <div>














</div>
  </div>
</footer>

    

  <script src="/dist/js/app.3fc0f988d21662902933.js"></script>


  </body>
</html>
